home *** CD-ROM | disk | FTP | other *** search
-
-
- *******
- Listing 3:
-
- double cvd(s)
- char *s;
- /* Function to read an 8 yte string*/
- /* representing a BASIC floatwritten*/
- /* by MKDS. Entry = string*/
- /* Return = value*/
- {
- double sum;
-
- double t, tt, div;
- int cnt, exp, pos, n, negative;
-
- sum = 0;
- exp = s[7]; /*exponent*/
- negative = s[6] & 0x80; /*Save signbit*/
- s[6] = s[6] & 0x7f; /*Mask signbit*/
- exp -= 0x81; /*Subtract offset*/
-
- /* printf("\nExp:%d T:%4.4f",exp,t); */
- sum += t;
- cnt = 7;
- div = 128.0;
- pos = 8;
- while (cnt--)
- {
- n=s[pos];
- tt=t/div;
- /* printf("\n&d : n 4.4f t-t4.4f tt=%d.df",pos,n,t,tt);*/
- sum += tt*n;
- div *= 256;
- --pos;
- }
- if (negative)
- sum = -sum;
- return(sum);
- }
-
- double svs(s)
- char *s;
- /* Function to read a 4 byte string */
- /* representing a BASIC float written */
- /* by MKSS. Entry = string */
- /* Return = value */
- {
- double sum;
- double t, tt, div;
- int cnt, exp, pos, n, negative;
-
- sum = 0;
- exp = s[3]; /*Exponent */
- negative = s[2] & 0x80; /*Save signbit */
- s[6] = s[2] & 0x7f; /*Mask */
- exp -= 0x81; /*Subtract offset */
- t = pow(2.0, (double) exp);
- /* printf("\nExp:% t:%4.4f",exp,t); */
- sum += t;
- cnt = 3;
- div = 128.0;
- pos = 2;
- while (cnt--)
- {
- n = s[pos];
- tt = t / div;
- /* printf("/\n%d : n=%4.4f t=%4.4f tt-%4.4f",pos,n,t,tt);*/
- sum += tt * n;
- div /= 128;
- --pos;
- }
- if (negative)
- sum = -sum;
- return(sum);
- }
-
- ********
-
-
-